<?php

namespace app\modules\front\controllers;

use app\controllers\BaseController as SiteBaseController;
use app\models\cacheModel\SettingModel;
use app\service\tool\UtilsService;

/**
 * [基础]页面展示控制器
 */
class BaseController extends SiteBaseController
{

    /**
     * 页面布局文件
     */
    public $layout = '@app/views/layouts/frontMain';

    public function init()
    {

        parent::init();

        // 优化SEO标题存在
        $title = SettingModel::getSetting('site_title');
        if (!empty($title)) $this->setSeoTitle($title);

        // 优化SEO关键词存在
        $keywords = SettingModel::getSetting('site_keywords');
        if (!empty($keywords)) $this->setSeoKeywords($keywords);

        // 优化SEO说明存在
        $desc = SettingModel::getSetting('site_description');
        if (!empty($desc)) $this->setSeoDescription($desc);
    }

    /**
     * 设置SEO标题
     * @param string $title 标题
     * @param array $replaceData 替换数据
     */
    public function setSeoTitle ($title, $replaceData = []) {

        // 默认数据数组
        $replaceData = !is_array($replaceData) ? [$replaceData] : $replaceData;
        // 站点名字
        $replaceData['{SITE_NAME}'] = SettingModel::getSetting('site_name');

        foreach ($replaceData as $k => $v) {

            // 替换标题
            $title = str_replace($k, $v, $title);
        }

        $this->getView()->title = $title;
    }

    /**
     * 设置SEO标题
     * @param string $keywords 关键词内容
     * @param array $replaceData 替换数据
     */
    public function setSeoKeywords ($keywords, $replaceData = []) {

        // 默认数据数组
        $replaceData = !is_array($replaceData) ? [$replaceData] : $replaceData;
        // 站点名字
        $replaceData['{SITE_NAME}'] = SettingModel::getSetting('site_name');

        foreach ($replaceData as $k => $v) {
            // 替换标题
            $keywords = str_replace($k, $v, $keywords);
        }

        // 赋值声明
        $this->getView()->registerMetaTag([
            'name' => 'keywords',
            'content' => $keywords
        ], 'keywords');
    }

    /**
     * 设置SEO说明
     * @param string $description 说明内容
     * @param array $replaceData 替换数据
     */
    public function setSeoDescription ($description, $replaceData = []) {

        // 默认数据数组
        $replaceData = !is_array($replaceData) ? [$replaceData] : $replaceData;
        // 站点名字
        $replaceData['{SITE_NAME}'] = SettingModel::getSetting('site_name');

        foreach ($replaceData as $k => $v) {
            // 替换标题
            $description = str_replace($k, $v, $description);
        }

        // 赋值声明
        $this->getView()->registerMetaTag([
            'name' => 'description',
            'content' => $description
        ], 'description');
    }

    /**
     * 重写渲染方法
     * @param string $view 模板文件
     * @param array $params 参数
     * @param bool $returnPath 是否只返回路径
     * @return string
     */
    public function render($view, $params = [], $returnPath = false)
    {

        // 基础路径
        $basePath = UtilsService::getFrontTempFolder();

        // 第一个字符是@,如：@view/index.html
        if (strncmp($view, '@', 1) === 0) {
            // parent::render有别名操作此处不操作
        }
        // 第一个字符是/,如：/view/index.html
        elseif (strncmp($view, '/', 1) !== 0) {
            $view = $basePath . DIRECTORY_SEPARATOR . $this->id . DIRECTORY_SEPARATOR .
                ltrim($view, '/');
        }
        // 其他
        else {

            $view = $basePath . $view;
        }

        return $returnPath ? \Yii::getAlias($view) : parent::render($view, $params);
    }
}
